package com.yuanheng100.ems4j.api;

import java.util.List;

import com.yuanheng100.ems4j.model.Ems4jEmployee;

/**
 * Created by wangguangshuo on 2016/12/19.
 */
public interface IEmployeeService
{

    /**
     * 根据id查询员工
     * 登录操作建议：1. 先getEmployeeById；2. 对比密码
     * @param userId
     * @return 查询的员工。如果不存在，则返回null
     */
    public Ems4jEmployee getEmployeeById(int userId);

    /**
     * 根据id查询员工
     * 登录操作建议：1. 先getEmployeeByMobile；2. 对比密码
     * @param mobile
     * @return 查询的员工。如果不存在，则返回null
     */
    public Ems4jEmployee getEmployeeByMobile(Long mobile);

    /**
     * 根据id查询员工
     * 登录操作建议：1. 先getEmployeeByEmail；2. 对比密码
     * @param email
     * @return 查询的员工。如果不存在，则返回null
     */
    public Ems4jEmployee getEmployeeByEmail(String email);


    /**
     * 递归查询子部门下的员工。这是一个消耗比较大的操作，请节约使用
     * @param depId 部门id，不能为空
     * @param layer 子部门层数。如果为0，则查询所有层级
     * @param appId 应用id。如果为0，则忽略app的约束
     * @return
     */
    public List<Ems4jEmployee> getEmployeeListByDepId(int depId, int layer, int appId);


    /**
     * 递归查询部门下指定角色指定状态的员工
     * @param depId 部门id，不能为空
     * @param layer 子部门层数。如果为0，则查询所有层级
     * @param roleId 角色id。如果为0，则忽略此约束
     * @param status 状态代码。如果为0，则忽略此约束
     * @param appId 应用id。如果为0，则忽略app的约束
     * @return
     */
    public List<Ems4jEmployee> getEmployeeListByDepIdRoleIdStatus(int depId, int layer, int roleId, short status, int appId);


    /**
     * 添加员工
     * @param employee 新员工对象。
     * @return 增加的条数。如果返回0，则意味操作失败
     */
    public int addEmployee(Ems4jEmployee employee);


    /**
     * 更新员工信息<br>
     * 删除员工操作通过更新员工的empstatus实现，不做物理删除
     * @param employee
     * @return 更新的条数。如果返回0，则意味操作失败
     */
    public int updateEmployee(Ems4jEmployee employee);

    /**
     * 获取所有的员工
     * @return
     */
    public List<Ems4jEmployee> getAllEmployees();

    /**
     * 将员工从部门fromDepartmentId转移到另一个部门toDepartmentId
     * @param fromDepartmentId
     * @param toDepartmentId
     */
    public int transferEmployee(Integer fromDepartmentId, Integer toDepartmentId);

}
